package br.com.cfccultura.admin.control.actions.financeiro;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.control.forms.financeiro.ConferenciaCaixaForm;
import br.com.cfccultura.admin.model.enums.FormaPagamento;
import br.com.cfccultura.admin.model.vo.ContaReceber;
import br.com.cfccultura.admin.model.vo.OrdemServico;
import br.com.cfccultura.admin.model.vo.OrdemServicoEspecie;

@Component("/conferenciaCaixa")
public class ConferenciaCaixaAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(ConferenciaCaixaAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
				
		ConferenciaCaixaForm caixaForm = (ConferenciaCaixaForm) form;
		if(caixaForm.getDataMovimento() == null || caixaForm.getDataMovimento().equals("")) {
			caixaForm.setDataMovimento(getDateFormat().format(new Date()));
		}
		
		ContaReceber filtro = new ContaReceber();
		filtro.setOrdemServicoEspecie(new OrdemServicoEspecie());
		filtro.getOrdemServicoEspecie().setOrdemServico(new OrdemServico());
		filtro.getOrdemServicoEspecie().getOrdemServico().setCadastro(getDateFormat().parse(caixaForm.getDataMovimento()));
		List<ContaReceber> recebidos = getFluxoCaixaDAO().consulta(filtro);
		
		if(recebidos.size() > 0) {
			request.setAttribute("recebidos", recebidos);
			double total  = 0D;
			double totalDinheiro = 0D;
			double totalCheque = 0D;
			for(ContaReceber conta : recebidos) {
				total += conta.getValorPagamento();
				if(conta.getOrdemServicoEspecie().getFormaPagamento().equals(FormaPagamento.DINHEIRO)) {
					totalDinheiro+=conta.getValorPagamento();
				} else if(conta.getOrdemServicoEspecie().getFormaPagamento().equals(FormaPagamento.CHEQUE)) {
					totalCheque+=conta.getValorPagamento();
				}
			}
			request.setAttribute("total", total);
			request.setAttribute("totalDinheiro", totalDinheiro);
			request.setAttribute("totalCheque", totalCheque);
		}
		
		request.setAttribute("dataDojo", getDateFormatDojo().format(filtro.getOrdemServicoEspecie().getOrdemServico().getCadastro()));
		
		return mapping.findForward("body");
	}

}
